home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ETO Development Tools 4
/
ETO Development Tools 4.iso
/
Tools - Objects
/
MacApp
/
MacApp 3.0a2
/
Libraries
/
UDesignator.cp
< prev
next >
Wrap
Text File
|
1991-05-01
|
15KB
|
516 lines
//$P
//[a-,body+,h-,o=100,r+,rec+,t=4,u+,#+,j=20/57/1$,n+]
// UDesignator.cp
/* Copyright © 1984-1991 by Apple Computer Inc. All rights reserved. */
#ifndef __UGEOMETRY__
#include <UGeometry.h>
#endif
#ifndef __UDESIGNATOR__
#include "UDesignator.h"
#endif
#ifndef __USTREAM__
#include <UStream.h>
#endif
#ifndef __UDOCUMENT__
#include <UDocument.h>
#endif
#ifndef __UMACAPPUTILITIES__
#include <UMacAppUtilities.h>
#endif
#ifndef __UMACAPPGLOBALS__
#include <UMacAppGlobals.h>
#endif
//--------------------------------------------------------------------------------------------------
#pragma segment MAInit
pascal void InitUDesignator(void)
{
// Suppress Linker dead stripping of these classes
if (gDeadStripSuppression)
{
DontDeadStrip(TLinearDesignator);
DontDeadStrip(TVRectDesignator);
DontDeadStrip(TRgnDesignator);
}
RegisterStdType("TLinearDesignator", kLinearDesignator);
RegisterStdType("TVRectDesignator", kVRectDesignator);
RegisterStdType("TRgnDesignator", kRgnDesignator);
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorRes
pascal void TDesignator::IDesignator(TDocument* itsDocument)
{
this->IObject();
fDocument = itsDocument;
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorRes
pascal void TDesignator::Initialize(void) // override
{
inherited::Initialize();
fDocument = NULL;
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorRead
pascal void TDesignator::InitFromStream(TDocument* itsDocument,
TStream*/* aStream */ )
{
this->IDesignator(itsDocument);
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorNonRes
pascal IDType TDesignator::GetSignature(void)
{
// this->SubClassResponsibility();
return ' ';
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorNonRes
pascal Size TDesignator::GetSize(void)
{
// this->SubClassResponsibility();
return 0;
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorNonRes
pascal Size TDesignator::GetSpecificationSize(void)
{
// SubClassResponsibility; <= don't call this because OVERRIDE's will call INHERITED...
// in your GetSpecificationSize OVERRIDE, call inherited::GetSpecificationSize so that itsSize
// gets zero'd here, and then add to the returned value the incremented size needed to save your
// particular specification
return 0;
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorWrite
pascal void TDesignator::WriteToStream(TStream* aStream)
{
// don't call SubClassResponsibility because OVERRIDE's may call INHERITED...
}
//--------------------------------------------------------------------------------------------------
#pragma segment MAFields
pascal void TDesignator::Fields(TObject* obj) // override
{
obj->DoToField("TDesignator", (Ptr)NULL, bClass);
obj->DoToField("fDocument", (Ptr) & fDocument, bObject);
inherited::Fields(obj);
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorNonRes
pascal ContainmentType TDesignator::IsContained(TDesignator*/* aDesignator */ )
{
// this->SubclassResponsibility();
return kNotContained;
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorRes
pascal void TLinearDesignator::ILinearDesignator(TDocument* itsDocument,
long startPos,
long endPos)
{
this->IDesignator(itsDocument);
fStartPos = startPos;
fEndPos = endPos;
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorRes
pascal void TLinearDesignator::Initialize(void) // override
{
inherited::Initialize();
fStartPos = 0;
fEndPos = 0;
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorNonRes
pascal IDType TLinearDesignator::GetSignature(void)
{
return kLinearDesignator;
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorNonRes
pascal Size TLinearDesignator::GetSize(void)
{
return (Size)(fEndPos - fStartPos);
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorNonRes
pascal Size TLinearDesignator::GetSpecificationSize(void)// override
{
return inherited::GetSpecificationSize() + (2 * sizeof(long));
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorRead
pascal void TLinearDesignator::InitFromStream(TDocument* itsDocument,
TStream* aStream)
{
long aLong;
inherited::InitFromStream(itsDocument, aStream);
aStream->ReadLong(aLong);
fStartPos = aLong;
aStream->ReadLong(aLong);
fEndPos = aLong;
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorWrite
pascal void TLinearDesignator::WriteToStream(TStream* aStream)// override
{
inherited::WriteToStream(aStream);
aStream->WriteLong(fStartPos);
aStream->WriteLong(fEndPos);
}
//--------------------------------------------------------------------------------------------------
#pragma segment MAFields
pascal void TLinearDesignator::Fields(TObject* obj)// override
{
obj->DoToField("TLinearDesignator", (Ptr)NULL, bClass);
obj->DoToField("fStartPos", (Ptr) & fStartPos, bLongInt);
obj->DoToField("fEndPos", (Ptr) & fEndPos, bLongInt);
inherited::Fields(obj);
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorNonRes
pascal ContainmentType TLinearDesignator::IsContained(TDesignator* aDesignator)
{
long itsStartPos;
long itsEndPos;
if (aDesignator && aDesignator->IsMemberClass(GetClassIDFromName("TLinearDesignator")))
{
itsStartPos = ((TLinearDesignator *)aDesignator)->fStartPos;
itsEndPos = ((TLinearDesignator *)aDesignator)->fEndPos;
if ((fStartPos <= itsStartPos) && (fEndPos >= itsEndPos))
return kFullyContained;
else if (((fStartPos <= itsStartPos) && (fEndPos < itsEndPos)) || ((fStartPos > itsStartPos) && (fEndPos >= itsEndPos)))
return kPartiallyContained;
}
return kNotContained;
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorRes
pascal void TVRectDesignator::IVRectDesignator(TDocument* itsDocument,
const VRect& itsDesignation)
{
this->IDesignator(itsDocument);
fDesignation = itsDesignation;
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorRes
pascal void TVRectDesignator::Initialize(void) // override
{
inherited::Initialize();
fDesignation = gZeroVRect;
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorNonRes
pascal IDType TVRectDesignator::GetSignature(void)
{
return kVRectDesignator;
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorNonRes
pascal Size TVRectDesignator::GetSize(void)
{
return (fDesignation.Length(vSel)) * (fDesignation.Length(hSel));
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorNonRes
pascal Size TVRectDesignator::GetSpecificationSize(void)// override
{
return inherited::GetSpecificationSize() + sizeof(VRect);
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorRead
pascal void TVRectDesignator::InitFromStream(TDocument* itsDocument,
TStream* aStream)
{
VRect aVRect;
inherited::InitFromStream(itsDocument, aStream);
aStream->ReadLong(aVRect.top);
aStream->ReadLong(aVRect.left);
aStream->ReadLong(aVRect.bottom);
aStream->ReadLong(aVRect.right);
fDesignation = aVRect;
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorWrite
pascal void TVRectDesignator::WriteToStream(TStream* aStream)// override
{
VRect aVRect;
inherited::WriteToStream(aStream);
aVRect = fDesignation;
aStream->WriteLong(aVRect.top);
aStream->WriteLong(aVRect.left);
aStream->WriteLong(aVRect.bottom);
aStream->WriteLong(aVRect.right);
}
//--------------------------------------------------------------------------------------------------
#pragma segment MAFields
pascal void TVRectDesignator::Fields(TObject* obj)// override
{
obj->DoToField("TVRectDesignator", (Ptr)NULL, bClass);
obj->DoToField("fDesignation", (Ptr) & fDesignation, bVRect);
inherited::Fields(obj);
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorNonRes
pascal ContainmentType TVRectDesignator::IsContained(TDesignator* aDesignator)
{
VRect myVRect;
VRect itsVRect;
VRect dstRect;
if (aDesignator && aDesignator->IsMemberClass(GetClassIDFromName("TVRectDesignator")))
{
myVRect = fDesignation;
itsVRect = ((TVRectDesignator *)aDesignator)->fDesignation;
dstRect = myVRect & itsVRect;
if (dstRect.Valid())
if (itsVRect == dstRect)
return kFullyContained;
else
return kPartiallyContained;
}
return kNotContained;
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorRes
pascal void TRgnDesignator::IRgnDesignator(TDocument* itsDocument,
RgnHandle itsDesignation,
Boolean freeRgnOnFree)
{
this->IDesignator(itsDocument);
fDesignation = itsDesignation;
fFreeRgnOnFree = freeRgnOnFree;
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorRes
pascal void TRgnDesignator::Initialize(void) // override
{
inherited::Initialize();
fDesignation = NULL;
fFreeRgnOnFree = TRUE;
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorRead
pascal void TRgnDesignator::InitFromStream(TDocument* itsDocument,
TStream* aStream)
{
long itsSize;
SignedByte savedState;
inherited::InitFromStream(itsDocument, aStream);
fDesignation = MakeNewRgn();
// prepare the handle's size for the data it will receive
itsSize = aStream->GetSize() - aStream->GetPosition();// size is stream size less curr pos
SetHandleSize((Handle)fDesignation, itsSize);
FailMemError();
// read in the data into the handle from the stream
savedState = LockHandleHigh((Handle)fDesignation);
aStream->ReadBytes(*((Handle)fDesignation), itsSize);
HSetState((Handle)fDesignation, savedState);
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorRes
pascal TObject* TRgnDesignator::Clone(void) // override
{
TRgnDesignator * aClonedRgnDesignator = NULL;
FailInfo fi;
VOLATILE(aClonedRgnDesignator);
if (fi.Try())
{
aClonedRgnDesignator = (TRgnDesignator *)inherited::Clone();
aClonedRgnDesignator->fDesignation = NULL;// so failure handler works
aClonedRgnDesignator->fDesignation = MakeNewRgn();
CopyRgn(fDesignation, aClonedRgnDesignator->fDesignation);
fi.Success();
}
else // Recover
{
aClonedRgnDesignator = (TRgnDesignator *)FreeIfObject(aClonedRgnDesignator);
}
return aClonedRgnDesignator;
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorNonRes
pascal void TRgnDesignator::Free(void) // override
{
if (fFreeRgnOnFree)
fDesignation = DisposeIfRgnHandle(fDesignation);
inherited::Free();
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorNonRes
pascal IDType TRgnDesignator::GetSignature(void)
{
return kRgnDesignator;
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorNonRes
pascal Size TRgnDesignator::GetSize(void)
{
return (*fDesignation)->rgnSize;
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorNonRes
pascal Size TRgnDesignator::GetSpecificationSize(void)// override
{
return inherited::GetSpecificationSize() + GetHandleSize((Handle)fDesignation);
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorWrite
pascal void TRgnDesignator::WriteToStream(TStream* aStream)// override
{
SignedByte savedState;
inherited::WriteToStream(aStream);
// write the data in the handle to the stream
savedState = LockHandleHigh((Handle)fDesignation);
aStream->WriteBytes(*((Handle)fDesignation), GetHandleSize((Handle)fDesignation));
HSetState((Handle)fDesignation, savedState);
}
//--------------------------------------------------------------------------------------------------
#pragma segment MAFields
pascal void TRgnDesignator::Fields(TObject* obj)// override
{
obj->DoToField("TRgnDesignator", (Ptr)NULL, bClass);
obj->DoToField("fDesignation", (Ptr) & fDesignation, bRgnHandle);
obj->DoToField("fFreeRgnOnFree", (Ptr) & fFreeRgnOnFree, bBoolean);
inherited::Fields(obj);
}
//--------------------------------------------------------------------------------------------------
#pragma segment MADesignatorNonRes
pascal ContainmentType TRgnDesignator::IsContained(TDesignator* aDesignator)
{
RgnHandle destRgn;
ContainmentType result = kNotContained;
if (aDesignator && aDesignator->IsMemberClass(GetClassIDFromName("TRgnDesignator")))
{
destRgn = MakeNewRgn();
SectRgn(fDesignation, ((TRgnDesignator *)aDesignator)->fDesignation, destRgn);
if (!EmptyRgn(destRgn))
if (EqualRgn(((TRgnDesignator *)aDesignator)->fDesignation, destRgn))
result = kFullyContained;
else
result = kPartiallyContained;
destRgn = DisposeIfRgnHandle(destRgn);
}
return result;
}